gdk: Filter out either smooth or non-smooth event depending on the evmask
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 23 Jan 2012 23:09:40 +0000 (00:09 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 1 Mar 2012 21:28:57 +0000 (16:28 -0500)
If a device provides both smooth and non-smooth events, the latter will be
flagged with _gdk_event_set_pointer_emulated() so the client side window
receives one or the other. If a device is only able to deliver non-smooth
events, those will be sent, so both direction/deltas may need to be handled.

gdk/gdkwindow.c

index 597b8cb9ec546ca307d7ddf0b47e03dc3bace002..e1a49154209915ef97e4e05a885d74e608a30702 100644 (file)
@@ -9696,6 +9696,13 @@ proxy_button_event (GdkEvent *source_event,
                                        state, time_, source_event,
                                        serial, FALSE);
     }
+  else if (type == GDK_SCROLL &&
+           (((evmask & GDK_SMOOTH_SCROLL_MASK) == 0 &&
+             source_event->scroll.direction == GDK_SCROLL_SMOOTH) ||
+            ((evmask & GDK_SMOOTH_SCROLL_MASK) != 0 &&
+             source_event->scroll.direction != GDK_SCROLL_SMOOTH &&
+             _gdk_event_get_pointer_emulated (source_event))))
+    return FALSE;
 
   event = _gdk_make_event (event_win, type, source_event, FALSE);